home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / TEMPLMON / TRACELIB.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-08  |  4.8 KB  |  125 lines

  1. /*
  2. TRACELIB v1.0                           © 1995 Robert Weiß
  3.  
  4. Die TRACELIB simuliert mit Hilfe der Trace-Funktion der
  5. Prozessoren 680x0 den Address-Error bei
  6. Wort-/Langwortzugriffen auf ungerade Addressen. Dies stellt
  7. natürlich keinen vollständigen Ersatz eines echten 68000er
  8. STs dar, da das ganze ziemlich bremst. Man kann sich ja
  9. leicht ausrechnen, daß für den Test pro Befehl nun 50-100
  10. Befehle ausgeführt werden. Die LIB ist vor allem dafür
  11. gedacht, das man, wenn man die kritische Stelle ungefähr
  12. kennt, kurzzeitig Tracen kann, nicht aber für evnt_multi()
  13. etc..
  14.  
  15. Tracelib ist FREEWARE, darf aber nur in unveränderter Form
  16. weitergegeben werden. Die kommerzielle Benutzung (Verkauf,
  17. PD-Disketten) ist untersagt.
  18.  
  19. Zur Benutzung der Funktionen Trace_ON() und Trace_OFF() wird
  20. TempleMon Version >= 2.4 benötigt. Alle anderen brauchen
  21. Version >= 2.00
  22.  
  23. Die Trace-Funktion kann nach Trace_Init() entweder im
  24. TempleMon selbst durch Aktivieren der Trace-Bits mit 't+',
  25. oder im Programm durch Trace_ON() aktiviert werden.
  26.  
  27. Die bei jedem Befehl angesprungene Routine prüft als erstet,
  28. ob der Befehl selbst in einem in der Speicherliste
  29. eingetragenen Bereich liegt. Dadurch kann man andere
  30. residente Programme vom Test ausschließen. Ist die
  31. Speicherliste leer (nach Trace_Init() ist sie es), wird
  32. jeder Befehl getestet, egal ob RAM, ROM, ROM-Modul, etc..
  33.  
  34. Getestet wird dann, ob ein Wort- oder Langwortzugriff auf
  35. eine ungerade Speicheraddresse erfolgt und löst
  36. gegebenenfalls einen Address-Error aus, wodurch man sich
  37. prompt im TempleMon befindet.
  38. */
  39.  
  40. #ifndef __TRACELIB__
  41. #define __TRACELIB__
  42.  
  43. /* Definition eines Speicherblocks                     */
  44.  
  45. typedef struct
  46. {
  47.     void *blk;          /* Addresse des Speicherblocks */
  48.     long len;           /* Länge in Bytes              */
  49. } MEMBLK;
  50.  
  51. /* Statisch in TRACELIB.O angelegt                     */
  52. /* auf Überlauf achten!!!                              */
  53.  
  54. extern MEMBLK BlkList[500];
  55.  
  56. /* Trace_Init() initialisiert den Speicherarray und    */
  57. /* meldet die Traceroutine bei TempleMon an. Ab diesem */
  58. /* Zeitpunkt kann die Traceroutine auch manuell im     */
  59. /* TempleMon per 't+' aktiviert werden.                */
  60. /* Return: ==0  Fehler beim anmelden (TempleMon da?)   */
  61. /*         !=0  Alles OK                               */
  62.  
  63. int Trace_Init (void);
  64.  
  65. /* Trace_Term() meldet die Traceroutine bei TempleMon  */
  66. /* wieder ab. Muß unbedingt vor Programmterminierung   */
  67. /* geschehen, da sonst bei aktivem Trace in freie      */
  68. /* Speicherbereiche gesprungen wird.                   */
  69. /* Return: ==0  Fehler beim abmelden (TempleMon da?)   */
  70. /*         !=0  Alles OK                               */
  71.  
  72. int Trace_Term (void);
  73.  
  74. /* Trace_ON() schaltet das Trace-Bit im SR an. Bei     */
  75. /* Prozessoren >68000 wird T1 gesetzt: Trace bei jedem */
  76. /* Befehl. Bewirkt das selbe wie manuell:              */
  77. /* 't+' CR 'g' CR 'a'                                  */
  78. /* Return: ==0  Fehler beim abmelden (TempleMon da?)   */
  79. /*         !=0  Alles OK                               */
  80.  
  81. int Trace_ON (void);
  82.  
  83. /* Trace_OFF() schaltet das Trace-Bit im SR aus. Bei   */
  84. /* Prozessoren >68000 werden T1 und T0 auf 0 gesetzt.  */
  85. /* Bewirkt das selbe wie manuell:                      */
  86. /* 't-' CR 'g' CR                                      */
  87. /* Return: ==0  Fehler beim abmelden (TempleMon da?)   */
  88. /*         !=0  Alles OK                               */
  89.  
  90. int Trace_OFF (void);
  91.  
  92. /* Traceblk_Ins(blk, len) fügt den Speicherblock mit   */
  93. /* Addresse blk und Länge len in die interne Speicher- */
  94. /* liste ein. Maximal können 500 Speicherblöcke        */
  95. /* von der Tracelib verwaltet werden.                  */
  96. /* Traceblk_Ins() sollte einmal beim Programmstart zum */
  97. /* Einfügen der Programmsegmente und dann bei jeder    */
  98. /* Speicheranforderung durch M(x)alloc() aufgerufen    */
  99. /* werden.                                             */
  100.  
  101. void Traceblk_Ins (void *blk, long len);
  102.  
  103. /* Traceblk_Chg(blk, newlen) ändert den Speicherblock  */
  104. /* mit Addresse blk und die neue Länge newlen          */
  105. /* Traceblk_Ins() sollte bei jedem Mshrink()           */
  106. /* aufgerufen werden.                                  */
  107.  
  108. void Traceblk_Chg (void *blk, long newlen);
  109.  
  110. /* Traceblk_Del(blk) entfernt den Speicherblock mit    */
  111. /* Addresse blk aus der Liste.                         */
  112. /* Traceblk_Del() sollte bei jedem Mfree()             */
  113. /* aufgerufen werden.                                  */
  114.  
  115. void Traceblk_Del (void *blk);
  116.  
  117. /* breakpoint() zeigt auf...                           */
  118. /* breakpoint:  illegal                                */
  119. /*              rts                                    */
  120. /* Damit kann man in den TempleMon springen und feine  */
  121. /* Sachen machen.                                      */
  122.  
  123. void breakpoint (void);
  124.  
  125. #endif /* __TRACELIB__ */